【问题标题】:How to modify properly the URL with mod rewrite如何使用 mod rewrite 正确修改 URL
【发布时间】:2017-01-27 15:59:51
【问题描述】:

我有一个动态生成的 URL-s 的站点,但它们都遵循以下模式: 域之后的文本是:

/index.php?content=99.Contact

/index.php?content=00.Home&article=00.Lorum+ipse.json

我正在寻找解决方案:

结果会是这样的:

domain/Contact
domain/home/Lorum+ipse

注意,00 和 99 是数字,总是两位数。

到目前为止,我已经看到了一些其他问题和解决方案,但从未能够在我的网站上实施它们。 到目前为止,根据http://www.javascriptkit.com/howto/htaccess13.shtml 的建议,我的 .htaccess 中阻止了一些不良机器人和网站撕裂者,以及其他一些重写,但不确定它的用途。

我的最终 .htaccess 文件应该是什么样子才能实现用户友好的 URL-s? 这就是我现在所拥有的。

#Blocking bad bots and site rippers (aka offline browsers) - http://www.javascriptkit.com/howto/htaccess13.shtml
RewriteEngine On

RewriteCond %{HTTP_USER_AGENT} ^BlackWidow [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Bot\ mailto:craftbot@yahoo.com [OR] 
RewriteCond %{HTTP_USER_AGENT} ^ChinaClaw [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Custo [OR] 
RewriteCond %{HTTP_USER_AGENT} ^DISCo [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Download\ Demon [OR] 
RewriteCond %{HTTP_USER_AGENT} ^eCatch [OR] 
RewriteCond %{HTTP_USER_AGENT} ^EirGrabber [OR] 
RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon [OR] 
RewriteCond %{HTTP_USER_AGENT} ^EmailWolf [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Express\ WebPictures [OR] 
RewriteCond %{HTTP_USER_AGENT} ^ExtractorPro [OR] 
RewriteCond %{HTTP_USER_AGENT} ^EyeNetIE [OR] 
RewriteCond %{HTTP_USER_AGENT} ^FlashGet [OR] 
RewriteCond %{HTTP_USER_AGENT} ^GetRight [OR] 
RewriteCond %{HTTP_USER_AGENT} ^GetWeb! [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Go!Zilla [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Go-Ahead-Got-It [OR] 
RewriteCond %{HTTP_USER_AGENT} ^GrabNet [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Grafula [OR] 
RewriteCond %{HTTP_USER_AGENT} ^HMView [OR] 
RewriteCond %{HTTP_USER_AGENT} HTTrack [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} ^Image\ Stripper [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Image\ Sucker [OR] 
RewriteCond %{HTTP_USER_AGENT} Indy\ Library [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} ^InterGET [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Internet\ Ninja [OR] 
RewriteCond %{HTTP_USER_AGENT} ^JetCar [OR] 
RewriteCond %{HTTP_USER_AGENT} ^JOC\ Web\ Spider [OR] 
RewriteCond %{HTTP_USER_AGENT} ^larbin [OR] 
RewriteCond %{HTTP_USER_AGENT} ^LeechFTP [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Mass\ Downloader [OR] 
RewriteCond %{HTTP_USER_AGENT} ^MIDown\ tool [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Mister\ PiX [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Navroad [OR] 
RewriteCond %{HTTP_USER_AGENT} ^NearSite [OR] 
RewriteCond %{HTTP_USER_AGENT} ^NetAnts [OR] 
RewriteCond %{HTTP_USER_AGENT} ^NetSpider [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Net\ Vampire [OR] 
RewriteCond %{HTTP_USER_AGENT} ^NetZIP [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Octopus [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Offline\ Explorer [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Offline\ Navigator [OR] 
RewriteCond %{HTTP_USER_AGENT} ^PageGrabber [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Papa\ Foto [OR] 
RewriteCond %{HTTP_USER_AGENT} ^pavuk [OR] 
RewriteCond %{HTTP_USER_AGENT} ^pcBrowser [OR] 
RewriteCond %{HTTP_USER_AGENT} ^RealDownload [OR] 
RewriteCond %{HTTP_USER_AGENT} ^ReGet [OR] 
RewriteCond %{HTTP_USER_AGENT} ^SiteSnagger [OR] 
RewriteCond %{HTTP_USER_AGENT} ^SmartDownload [OR] 
RewriteCond %{HTTP_USER_AGENT} ^SuperBot [OR] 
RewriteCond %{HTTP_USER_AGENT} ^SuperHTTP [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Surfbot [OR] 
RewriteCond %{HTTP_USER_AGENT} ^tAkeOut [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Teleport\ Pro [OR] 
RewriteCond %{HTTP_USER_AGENT} ^VoidEYE [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Web\ Image\ Collector [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Web\ Sucker [OR] 
RewriteCond %{HTTP_USER_AGENT} ^WebAuto [OR] 
RewriteCond %{HTTP_USER_AGENT} ^WebCopier [OR] 
RewriteCond %{HTTP_USER_AGENT} ^WebFetch [OR] 
RewriteCond %{HTTP_USER_AGENT} ^WebGo\ IS [OR] 
RewriteCond %{HTTP_USER_AGENT} ^WebLeacher [OR] 
RewriteCond %{HTTP_USER_AGENT} ^WebReaper [OR] 
RewriteCond %{HTTP_USER_AGENT} ^WebSauger [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Website\ eXtractor [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Website\ Quester [OR] 
RewriteCond %{HTTP_USER_AGENT} ^WebStripper [OR] 
RewriteCond %{HTTP_USER_AGENT} ^WebWhacker [OR] 
RewriteCond %{HTTP_USER_AGENT} ^WebZIP [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Wget [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Widow [OR] 
RewriteCond %{HTTP_USER_AGENT} ^WWWOFFLE [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Xaldon\ WebSpider [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Zeus 
RewriteRule ^.* - [F,L]


RewriteCond %{HTTP_HOST} ^gyulasoos.com$
RewriteRule ^/?$ "https\:\/\/www\.gyulasoos\.com\/" [R=301,L]

【问题讨论】:

  • 目前的重写规则是将非www请求重定向到www-requests。您如何处理 PHP 文件中的请求?关于数字,/index.php?content=Contact 会获取正确的页面还是99. 重要?
  • 两位数和 .是重要的。 :D 00.Home、11.About、99.Contact 等。与第二个示例相同:artilce=11.Something.json。 11. 很重要。
  • 前面能不能有另外两个数字同名,比如77.Contact?相同的内容是否总是相同的数字(Content 前面总是有99. 吗?
  • 可以,但不会! :D
  • 这是一个特殊的站点,它不使用数据库。相反,读取一个文件夹结构,该结构将被翻译成站点的主菜单,并且该结构内的每个 json 文件都是一篇文章或内容。这些数字用于定义菜单项或文章应出现的顺序。它们可能具有相同的编号,在这种情况下它们将按字母顺序排列。

标签: php apache .htaccess mod-rewrite


【解决方案1】:

由于有两种不同的场景(一个或两个 url 片段),我们可以为此设置两个规则:

# Put these lines last in your htaccess

# Ignore the rules if the file or folder actually exists
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .* - [L]

# This will match /foo
RewriteRule ^([^/]+)/?$ index.php?content=$1 [L,QSA]

# This will match /foo/bar and append .json on the last one
RewriteRule ^([^/]+)/([^/]+)/?$ index.php?content=$1&article=$2.json [L,QSA]

【讨论】:

  • 这里是这个站点:gyulasoos.com 我已经修改了 htaccess,发生了一件事,一件事没有发生:主登录页面,在域不再工作之后没有其他内容,但任何其他链接都与修改前相同。 :(
  • 好的,所以...它正在工作,但是它破坏了我的主页(域之后没有任何内容,并且一些嵌入的图像不再工作。我现在肯定走​​在正确的道路上,只需要找到问题的根源。谢谢!
  • 对不起,这个血腥的 htaccess 让我发疯了!当只有域名而没有其他内容时,有没有办法忽略?
  • @GyulaSoós - 我的错。我忘记了第一组。我已经更新了答案,它现在将忽略对有效文件或文件夹的所有请求,这意味着 / 和您资产的所有路径都应该有效。
  • 哦!你是明星!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-05
  • 1970-01-01
  • 1970-01-01
  • 2019-02-03
  • 1970-01-01
相关资源
最近更新 更多