更好的重写URL方法

时间:2016-10-01 13:50:31

标签: php apache .htaccess mod-rewrite url-rewriting

哪种方法更适合重写网址

(a)中。使用htaccess文件并在其中使用正则表达式,用于重写规则

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f

RewriteRule ^users/(\d+)*$ ./profile.php?id=$1
RewriteRule ^threads/(\d+)*$ ./thread.php?id=$1

RewriteRule ^search/(.*)$ ./search.php?query=$1

OR

(b)中。  使用htacess文件只需将每个url重定向到index.php,然后使用PHP进行进一步的重定向。

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f

 RewriteRule ^.*$ ./index.php

之后,index.php可以使用$_SERVER['REQUEST_URI']处理每个网址,我们可以使用require()语句加载特定文件

哪种方法在安全性和速度方面更好?

2 个答案:

答案 0 :(得分:0)

此方法更完美,使用以下代码作为.htaccess文件,并定义您希望在脚本中访问的目录,例如:js,css或upload folders

RewriteCond $1 ^(index\.php|robots\.txt|favicon\.ico|public|assets|**data**|**live**|**css**|**js**|**images**).

如果你想把你的脚本放在文件夹中,你必须在/index.php之前定义文件夹名称,这样我们才能

RewriteRule ^(.*)$ **anyFolderName**/index.php/$1 [PT,L]

请确保您没有添加任何额外的空格,字母或输入,否则重写模型将无法执行。

注意:还要确保从服务器/ apache / apache modules / rewrite_module运行/检查rewrite_module。

<IfModule mod_rewrite.c>
# Turn on URL rewriting
RewriteEngine On

# If your website begins from a folder e.g localhost/my_project then 
# you have to change it to: RewriteBase /my_project/
# If your site begins from the root e.g. example.local/ then
# let it as it is
RewriteBase /

# Protect application and system files from being viewed when the index.php is missing
RewriteCond $1 ^(application|system|private|logs)

# Rewrite to index.php/access_denied/URL
RewriteRule ^(.*)$ index.php/access_denied/$1 [PT,L]

# Allow these directories and files to be displayed directly:
RewriteCond $1 ^(index\.php|robots\.txt|favicon\.ico|public|assets)

# No rewriting
RewriteRule ^(.*)$ - [PT,L]

# Rewrite to index.php/URL
RewriteRule ^(.*)$ /index.php/$1 [PT,L]
</IfModule>

答案 1 :(得分:0)

这取决于您的要求。如果你已经创建了那些php文件,那么将第一个.htaccess重构为这样的单一规则应该可以正常工作:

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f
RewriteRule ^([\w-]+)/(\d+)/?$ $1.php?id=$2 [L,QSA]