【问题标题】:Apache L|Last flag not stopping the loopApache L|最后一个标志没有停止循环
【发布时间】:2013-11-24 13:25:28
【问题描述】:

我正在重写特定页面访问的请求,但我想为一些页面添加排除项。假设,我希望我的请求 site.com/page/test 到 goto site.com/page.php?str=test 但我想为一个字符串添加一个排除项,以便不去那个页面而是去另一个页面,比如: site.com/page/contact 应该去 site.com/contact.php

这就是我的尝试:

RewriteRule ^static/mobile_app/?$ static/mobile_app.php [QSA,L]
RewriteRule ^static/([a-zA-Z0-9%.\-_]+)/?$ static/page.php?url_key=$1 [QSA,L]

我在文件末尾也有这个:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .? /static/page.php?url_key=404 [L]

奇怪的是,如果我尝试以下规则,它会起作用:

RewriteRule ^static/mobile_app.php$ static/mobile_app.php [QSA,L]
RewriteRule ^static/([a-zA-Z0-9%.\-_]+)/?$ static/page.php?url_key=$1 [QSA,L]

意思是,如果我尝试编写带有扩展名的完整文件名,它可以工作。有人可以帮忙吗?谢谢。

【问题讨论】:

  • 试着清楚地定义你的问题,因为它不是很容易理解。
  • @anubhava 谢谢。我再次在最后一行写了描述。现在可以理解了吗?我想说的是,如果我在规则中写了完整的文件名,它对我有用。但我希望规则能够在不将 .php 添加到我的规则的情况下工作。
  • @RajaAmerKhan:什么有效或无效?我的意思是你在浏览器中输入的网址是什么? contact 的规则在哪里?
  • @regilero 规则 static/mobile_app.php 适用于 static/mobile_app.php [L]。而 static/mobile_app 不会转到 static/mobile_app.php [L]。

标签: php apache .htaccess rewrite rule


【解决方案1】:

让你的完整 DOCUMENT_ROOT/.htaccess 像这样:

Options +FollowSymLinks -MultiViews
RewriteEngine On

# To externally redirect /dir/file.php to /dir/file
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(.+?)\.php[\s?] [NC]
RewriteRule ^ /%1 [R=301,L,NE]

RewriteRule ^static/([\w.-]+)/?$ static/page.php?url_key=$1 [QSA,L,NC]

## To internally redirect /dir/file to /dir/file.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /static/page.php?url_key=404 [L,QSA]

【讨论】:

  • 谢谢,但它不会将其重定向到请求的文件。使用上面的代码,我尝试了 static/mobile_apps 但它没有带我到 static/mobile_apps.php 而是 404 页面。我还尝试添加重写规则:^static/mobile_apps/?$ static/mobile_apps.php [L] 以及您的规则,但没有帮助。
  • 第一季度。这是唯一的 .htaccess 还是你有另一个? Q2。这是这个 .htaccess 中唯一的代码吗?如果您有其他代码,请发布有问题的代码? Q3。上面 .htaccess 的位置是什么?
  • 1.这是唯一的 .htaccess,它位于根目录中(不在静态目录中)。 2.不,有很多代码,但没有一个与这些规则相关。这些也是重写规则,但适用于其他页面。我还应该发布吗? 3.你贴的最后3行在底部,其余代码在其他重写规则旁边。
  • 另外,您的代码将 static/testpage.php 带到 static/testpage 但这不是我想要的?
  • static/testpage.php to static/testpage but this is not what I want 哦,我明白了,我想我并没有清楚地理解您的所有要求。您能否编辑问题并在要点中列出您的要求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-07
  • 2021-05-15
  • 2021-09-15
  • 2011-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多