我尝试使用以下代码推荐网址(例如从page.php?page_id=1
到page/1
或page/pagename
或仅pagename
):
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteBase /subdirectory/
# If user tries to access "subdirectory/page" without "get" then
RewriteRule ^page/ page.php [L]
# If user tries to access "subdirectory/page/1" or "subdirectory/pagename" then
RewriteRule ^page/1 page.php?page_id=1 [L]
RewriteRule ^page/pagename page.php?page_id=1 [L]
# If user tries to access "subdirectory/pagename" only then
RewriteRule ^pagename page.php?page_id=1 [L]
如果我将其关闭(RewriteEngine Off
或甚至删除整个.htaccess文件)并且如果我将其打开,则会出错 - 它会将自身重定向到父目录(localhost www
文件夹),例如从subdirectory/page/etc.
到page/etc.
。如果它最终起作用,在我一次又一次地尝试(并且一次又一次地......)为了使其工作而不停地改变它,当它具有尾部斜线时它会导致无限循环(例如{{1或者page/1
)或它只是没有正确显示页面(因为浏览器将其视为真实的路径/文件夹,而不是slug)
我知道我可能做错了什么(我是.htaccess的新手),但我不知道......有什么想法吗?
非常感谢。
更新: .htaccess文件位于"子目录"夹。 www文件夹中有另一个.htaccess文件(localhost的主文件夹,也包括"子文件夹"),其中包含:
page/somepage
它的注释只是因为这是禁用它的唯一方法 - 我尝试了#34;重写引擎关闭",没有成功
答案 0 :(得分:2)
您可以使用以下规则:
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /subdirectory/
#if an existent file or dir is requested,serve it immideatly
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
#####
# If user tries to access "page" without "get" then
RewriteRule ^page/ page.php [L]
# If user tries to access "page/1" or "pagename" then
RewriteRule ^page/1 page.php?page_id=1 [L]
RewriteRule ^page/pagename page.php?page_id=1 [L]
# If user tries to access "pagename" only then
RewriteRule ^pagename page.php?page_id=1 [L]
答案 1 :(得分:0)
由于已经回答了主要问题,这里是尾部斜杠的附加问题。尝试添加重定向规则:
RewriteRule ^(.*)/$ /$1 [L,R=301]
这将回复301重定向[R=301]
并停止处理更多规则。 [L]
=最后一条规则
e.g。 /subdirectory/1/
被重定向到/subdirectory/1
现在由浏览器来请求重定向的URL。然后其他规则将付诸行动。