我正在使用htaccess,我试图阻止.php显示地址栏中的文件。我目前有这个代码:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([a-zA-Z0-9-]+)$ index.php?pagename=$1.php
和index.php有
include $_GET["pagename"];
如果网址为domain.com/customer/tickets/openticket
它应该重写为domain.com/customer/tickets/openticket.php
我怎样才能使这个仅适用于
domain.com/customer和my.domain.com?
答案 0 :(得分:0)
首先,检查PHP扩展名URL_rewrite 当下面的代码在您的URL上找到一个openticket时,将其重写为openticket.php
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^openticket/?$ openticket.php [L,NC]
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule . / [L,R=301]
</IfModule>
答案 1 :(得分:0)
网址重写规则不是魔术。您不能只编写一个包含一千页的系统,然后使用该规则来执行您想要的操作。您需要编写已经考虑过规则的系统。
在这种情况下你能做的是重写所有的规则,说当你在网址中找到某个名字时,会绘制特定的文件。我并不特别懂魔术。
它会是这样的:
RewriteRule ^page1/?$ page1.php [L,NC]
RewriteRule ^page2/?$ page2.php [L,NC]
RewriteRule ^page3/?$ page3.php [L,NC]
RewriteRule ^page4/?$ page4.php [L,NC]
等等。
如果其他任何用户知道它的魔力,请告诉我。
更新
也许你可以像这样尝试一些(这只是一个想法/魔术):
RewriteRule ^([a-zA-Z-]+)?$ /$1.php [NC]
答案 2 :(得分:0)
尝试:
RewriteCond %{REQUEST_URI} ^/customer/ [OR]
RewriteCond %{HTTP_HOST} ^my\.domain\.com$ [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.php -f
RewriteRule ^(.*)$ index.php?pagename=$1.php [L]
只有在“customer”文件夹中或者主机为“my.domain.com”时才会尝试添加php扩展名。您只需将最后一行替换为:
即可完全绕过index.php
文件
RewriteRule ^(.*)$ /$1.php [L]
当有人在浏览器的地址栏中输入http://domain.com/customer/tickets/openticket.php
这样的内容时,为了删除 php扩展程序,你需要这样:
RewriteCond %{REQUEST_URI} ^/customer/ [OR]
RewriteCond %{HTTP_HOST} ^my\.domain\.com$ [NC]
RewriteCond %{THE_REQUEST} \ /+([^\?\ ]+)\.php
RewriteRule ^ /%1 [L,R=301]
答案 3 :(得分:0)
尝试:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteCond %{REQUEST_URI} !^(.*)/customer/(.*)
RewriteRule ^(.*)$ index.php?pagename=$1.php