我是使用htaccess和mod_rewrite的新手,所以我刚刚设法将我的GET页面变量重写为examples.com/page_name /
然而,这需要一个/之后,我知道它被明确地添加到重写中,但是如果我删除它,那么我得到一个500错误并且我尝试添加一个?在它之后,根据我在网上找到的资源使它成为可选项,然而,它再次给我一个500错误,有没有更好的写作方式呢?
RewriteEngine On
RewriteRule ^([^/]*)\/$ /?page=$1 [L]
答案 0 :(得分:3)
由于您创建了无限循环,因此出现500错误。
说明:(当斜线变为可选时)
domain.com/page_name/
被重写为/?page=page_name
/?page=page_name
表示/index.php?page=page_name
index.php
为避免这种情况,您可以使用此代码
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ /?page=$1 [L]
此代码在重写之前检查请求URI是否不是现有文件/文件夹 如果你不使尾随斜杠可选,那么你的规则可以解决 这个技巧。
RewriteRule ^([^/]+)/$ /?page=$1 [L]
这将是一个更好的主意,因为你不会有重复的内容(2个不同的网址 - 有/没有尾随斜线 - 给出相同的内容:错误对于搜索引擎)。
结论:选择一种格式,但不能同时选择两种格式。如果您选择without trailing slash
格式,则可以使用我的第一部分代码(您可以删除?
)。否则,您可以选择我的第二个(看起来与您的第二个几乎相同)。
注意:您不需要使用 mod_rewrite
逃离/
答案 1 :(得分:0)
斜杠是转义的,因此如果你想删除尾部斜杠,你也必须删除反斜杠。
RewriteEngine On
RewriteRule ^([^\/]*)$ /?page=$1 [L]
如果您想使尾随斜线可选,请尝试:
RewriteEngine On
RewriteRule ^([^\/]*)\/?$ /?page=$1 [L]